<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>排序算法之鸡尾酒排序</title>
  </head>
  <body>
    <script type="text/javascript">
      function swap(arr, i, j) {
        let temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
      }

      function cocktailSort(arr) {
        const len = arr.length; 
        for (let i = 0; i < len / 2; i++) {
          // 有序标记，每一轮的初始值都是 true
          let isSort = true;
          // 奇数轮，从左向右比较和交换
          for (let j = i; j < len - 1 - i; j++) {
            if (arr[j] > arr[j + 1]) {
              swap(arr, j, j + 1);
              // 有元素交换，所以不是有序的，标记变为 false
              isSort = false;
            }
          }
          if (isSort) {
            break;
          }
          // 在偶数轮之前，将 isSort 重新标记为 true
          isSort = true;
          // 偶数轮，从右向左比较和交换
          for (let j = len - 1 - i; j > i; j--) {
            if (arr[j] < arr[j - 1]) {
              swap(arr, j, j - 1);
              // 因为有元素进行交换，所以不是有序的，标记变为 false
              isSort = false;
            }
          }
          if (isSort) {
            break;
          }
        }
      }

      const arr = [10, 6, 3, 4, 8, 1, 2];
      cocktailSort(arr)
      console.log(arr);
    </script>
  </body>
</html>
